HarmonyOS-鸿蒙app开发 —基于java_智能穿戴_智慧屏_音乐播放器开发指导

HarmonyOS-鸿蒙app开发 —基于java_智能穿戴_智慧屏_音乐播放器开发指导

音乐播放应用为开发者提供了调用音频文件播放的方法。应用主要实现的功能有:播放、暂停、上一首、下一首、快进、快退等。

本示例在main路径下的resources文件夹中创建了rawfile文件夹用于存放音频文件,应用编译时将其直接打包进hap包。如果需要播放本地的音频文件,可参考从本地文件库获取媒体文件信息来获取本地文件。

设计UI界面。根据所需的界面,采用XML文件方式创建相应的布局,具体方法参见XML创建布局

设置控件的焦点属性与默认焦点,具体方法参见45

设置遥控器响应,具体方法参见6

创建资源服务管理ResourceServiceManager类,在内部初始化音乐列表。

创建音乐信息模型类AudioModel,包含音乐名称title、作者artist、音乐源文件src、显示图像image等信息。

public AudioModel(String title, String artist, String src, int image) {

this.title = title;

this.artist = artist;

this.lyric = String.format(Locale.ENGLISH, DUMMY_LRC, title, artist);

this.src = Const.ASSETS_CACHE_BASE + src;

this.image = image;

}

以AudioModel为元素类型创建音乐播放列表playList,并对其进行初始化。

public void initSongList(int cIndex) {

playList.add(new AudioModel(“Test Audio No.1”, “Bowers”, “test.aac”, ResourceTable.Media_no_one));

playList.add(new AudioModel(“Test Audio No.2”, “Cahill”, “test.m4a”, ResourceTable.Media_no_two));

if (cIndex > 0) {

currentIndex = cIndex;

}

}

依据音频播放开发指导创建播放服务管理PlayManager方法类,并在其内部音乐播放、暂停、恢复等功能,以便在AbilitySlice中的调用。

public class PlayManager {

private static final int MICRO_MILLI_RATE = 1000;

private static PlayManager instance = new PlayManager();

BaseFileDescriptor assetfd = null;

private Player player;

private Context context;

private boolean isInitialized = false;

 

private PlayManager() {

}

 

public static PlayManager getInstance() {

return instance;

}

// 初始化设置

public synchronized void setup(Context context) {

if (context == null) {

return;

}

 

if (isInitialized) {

return;

} else {

this.context = context;

this.isInitialized = true;

}

player = new Player(this.context);

}

 

// 当前是否正在播放

public synchronized boolean isPlaying() {

return player.isNowPlaying();

}

 

 

public synchronized Player getPlayer() {

return player;

}

 

//音乐播放功能,其中filePath是指定的hap包中音频文件的路径

public synchronized boolean play(String filePath, int startMillisecond) {

if (!isInitialized) {

return false;

}

 

if (player != null) {

if (isPlaying()) {

player.stop();

}

player.release();

}

 

player = new Player(context);

 

try {

assetfd = this.context.getResourceManager().getRawFileEntry(filePath).openRawFileDescriptor();

} catch (IOException e) {

return false;

}

 

if (!player.setSource(assetfd)) {

return false;

}

 

if (!player.prepare()) {

return false;

}

 

if (startMillisecond > 0) {

int microsecond = startMillisecond * MICRO_MILLI_RATE;

if (!player.rewindTo(microsecond)) {

return false;

}

}

 

if (player.play()) {

return true;

} else {

return false;

}

}

 

// 音乐暂停功能

public synchronized void pause() {

if (player == null) {

return;

}

if (isPlaying()) {

player.pause();

}

}

 

// 音乐播放恢复功能

public synchronized void resume() {

if (player == null) {

return;

}

if (!isPlaying()) {

player.play();

}

}

 

// 获取当前音乐的总长度

public synchronized int getAudioDuration() {

if (player == null) {

return 0;

}

return player.getDuration();

}

 

// 获取当前音乐播放位置的时间点

public synchronized int getAudioCurrentPosition() {

if (player == null ) {

return 0;

}

return player.getCurrentTime();

}

}

 

开发播放上一首、下一首的功能。根据音乐列表playList中的序号index进行更新。

public AudioModel next() {

currentIndex++;

if (currentIndex >= playList.size()) {

currentIndex = 0;

}

return playList.get(currentIndex);

}

 

public AudioModel previous() {

currentIndex–;

if (currentIndex < 0) {

currentIndex = playList.size() – 1;

}

return playList.get(currentIndex);

}

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x